"""
简单工厂模式（Simple Factory Pattern）是一种创建型设计模式，其主要目的是通过一个单独的工厂类来创建对象，而不直接使用类的构造函数。
这个工厂类包含一个方法，根据客户端的请求，动态地创建并返回合适的具体类的实例。
意图：
    封装对象创建过程：将对象的实例化过程封装在一个单独的工厂类中，客户端无需了解具体类的实现细节，只需通过工厂类获取所需的对象。
    解耦：通过简单工厂模式，客户端与具体类的实例化过程解耦，当需要更改具体类时，只需修改工厂类中的实现，而不影响客户端代码。
适用性：
    对象创建逻辑相对简单：当对象的创建逻辑不复杂，只需根据少量参数进行简单的条件判断即可完成时，简单工厂模式是一个合适的选择。
    减少客户端与具体类的依赖：当客户端需要与多个具体类直接交互时，通过工厂类来管理对象的创建，可以减少客户端与具体类之间的耦合度。
    便于扩展：当需要添加新类型的对象时，只需修改工厂类的代码，符合开闭原则（对扩展开放，对修改关闭）。
"""


# 1.具体产品
class Car:
    def __init__(self, name):
        self.name = name


# 2.具体工厂
class CarFactory:
    def create_car(self, car_type):
        if car_type == 'SUV':
            return Car('SUV Car')
        elif car_type == 'Sedan':
            return Car('Sedan Car')
        else:
            raise ValueError(f'Unkown car type: {car_type}')


if __name__ == '__main__':
    factory = CarFactory()
    car1 = factory.create_car('SUV')
    car2 = factory.create_car('Sedan')
    print(car1.name)
    print(car2.name)
